﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PGI.LN.Inventario;
using PGI.LN.Producto;
using PGI.EN.Inventario;
using PGI.EN.Producto;
using PGI.EN.Usuario;

namespace PGI.WF
{
    public partial class FrmInventarioBajas : Form
    {
        private int filas = -1;
        public int EstadoInventario = 0;
        private bool ddlCargado = false;
        public InventarioProductoDetalleEn InvVentasDetalle = null;
        public UsuarioEn usuarioForm;
        
        public FrmInventarioBajas()
        {
            InitializeComponent();
        }

        private void FrmInventarioBajas_Load(object sender, EventArgs e)
        {
            for (int j = 0; j < 7; j++)
                dgwInventarioBajas.Columns[j].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        }
        
        private void FrmInventarioBajas_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!this.IsDisposed)
            {
                DialogResult dr = MessageBox.Show(this, "¿Desea salir de la ventana sin guardar cambios?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                    this.Dispose();
                else
                    e.Cancel = true;
            }
        }

        private void FrmInventarioBajas_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
                btnCerrar_Click(sender, e);

            if (e.KeyCode == Keys.F1)
                btnInsertarBaja_Click(sender, e);


            if (e.KeyCode == Keys.Enter)
            {
                string codigo = "";

                if (dgwInventarioBajas.Rows[filas].Cells[1].Value != null)
                {

                    codigo = dgwInventarioBajas.Rows[filas].Cells[1].Value.ToString();

                    List<InventarioProductoEn> lstprodInventario = new List<InventarioProductoEn>();

                    InventarioProductoEn InventarioProductoEn = InventarioProductoLn.InvProducto(codigo);

                    if (InventarioProductoEn != null)
                    {
                        dgwInventarioBajas.Rows[filas].Cells[0].Value = InventarioProductoEn.ProductoID;
                        dgwInventarioBajas.Rows[filas].Cells[1].Value = InventarioProductoEn.CodBarra;
                        dgwInventarioBajas.Rows[filas].Cells[2].Value = InventarioProductoEn.DescripcionProd;
                        dgwInventarioBajas.Rows[filas].Cells[3].Value = InventarioProductoEn.DescripcionCat;
                        dgwInventarioBajas.Rows[filas].Cells[4].Value = InventarioProductoEn.StockMinimo;

                        if (!ddlCargado)
                        {

                            DataGridViewTextBoxColumn[] columnas = new DataGridViewTextBoxColumn[9];

                            DataGridViewTextBoxColumn txtTalla = new DataGridViewTextBoxColumn();
                            txtTalla.HeaderText = "Talla";
                            txtTalla.Name = "Talla";
                            txtTalla.ReadOnly = true;
                            txtTalla.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[0] = txtTalla;
                            DataGridViewTextBoxColumn txtTallaID = new DataGridViewTextBoxColumn();
                            txtTallaID.HeaderText = "TallaID";
                            txtTallaID.Name = "TallaID";
                            txtTallaID.Visible = false;
                            txtTallaID.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[1] = txtTallaID;

                            DataGridViewTextBoxColumn txtColor = new DataGridViewTextBoxColumn();
                            txtColor.HeaderText = "Color";
                            txtColor.Name = "Color";
                            txtColor.ReadOnly = true;
                            txtColor.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[2] = txtColor;
                            DataGridViewTextBoxColumn txtColorID = new DataGridViewTextBoxColumn();
                            txtColorID.HeaderText = "ColorID";
                            txtColorID.Name = "ColorID";
                            txtColorID.Visible = false;
                            txtColorID.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[3] = txtColorID;

                            DataGridViewTextBoxColumn txtMaterial = new DataGridViewTextBoxColumn();
                            txtMaterial.HeaderText = "Material";
                            txtMaterial.Name = "Material";
                            txtMaterial.ReadOnly = true;
                            txtMaterial.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[4] = txtMaterial;
                            DataGridViewTextBoxColumn txtMaterialID = new DataGridViewTextBoxColumn();
                            txtMaterialID.HeaderText = "MaterialID";
                            txtMaterialID.Name = "MaterialID";
                            txtMaterialID.Visible = false;
                            txtMaterialID.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[5] = txtMaterialID;

                            DataGridViewTextBoxColumn txtTemporada = new DataGridViewTextBoxColumn();
                            txtTemporada.HeaderText = "Temporada";
                            txtTemporada.Name = "Temporada";
                            txtTemporada.ReadOnly = true;
                            txtTemporada.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[6] = txtTemporada;
                            DataGridViewTextBoxColumn txtTemporadaID = new DataGridViewTextBoxColumn();
                            txtTemporadaID.HeaderText = "TemporadaID";
                            txtTemporadaID.Name = "TemporadaID";
                            txtTemporadaID.Visible = false;
                            txtTemporadaID.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[7] = txtTemporadaID;

                            DataGridViewTextBoxColumn txtStock = new DataGridViewTextBoxColumn();
                            txtStock.HeaderText = "Stock";
                            txtStock.Name = "Stock";
                            txtStock.Visible = true;
                            txtStock.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[8] = txtStock;
                            
                            dgwInventarioBajas.Columns.AddRange(columnas);
                            ddlCargado = true;
                        }
                    }

                    else
                    {

                        DialogResult dr = MessageBox.Show(this, "¿El código ingresado no corresponde con ninguno en la base de datos. Desea agregar un producto nuevo con este código?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (dr == DialogResult.Yes)
                        {

                            FrmProductoInsertar frmInsProd = FrmProductoInsertar.Instance();
                            frmInsProd.prodObj = new ProductoEn();
                            frmInsProd.prodObj.CodBarra = codigo;
                            frmInsProd.EstadoForm = 4;
                            frmInsProd.ShowDialog();
                            frmInsProd.Activate();

                            FrmInventarioBajas_KeyUp(sender, e);

                        }

                    }
                }
            }
        }
        
        private void dgwInventarioBajas_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            int Cantidad = 0;

            if (dgwInventarioBajas.Rows[e.RowIndex].Cells[5].Value != null)
            {
                if (dgwInventarioBajas.Rows[e.RowIndex].Cells[6].Value.ToString() != "")
                    Cantidad = Convert.ToInt32(dgwInventarioBajas.Rows[e.RowIndex].Cells[5].Value.ToString());
            }
                        
        }

        private void dgwInventarioBajas_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            filas--;
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show(this, "¿Desea salir de la ventana sin guardar cambios?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr == DialogResult.Yes)
                this.Dispose();
        }
        
        private void btnInsertarBaja_Click(object sender, EventArgs e)
        {
            if (dgwInventarioBajas.Rows.Count == 1)
            {
                if (dgwInventarioBajas.Rows[0].Cells[1].Value == null)
                    MessageBox.Show(this, "Aún no se ha ingresado información a la tabla para ser guardada", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                string error = ValidarValoresGrilla(dgwInventarioBajas);
                if (error == "")
                {
                    for (int i = 0; i < dgwInventarioBajas.RowCount - 1; i++)
                    {
                        
                        //--------------Llenar objeto de Movimiento---------------------------------------------
                        MovimientoInventarioEn movimiento = new MovimientoInventarioEn();
                        //NECESITO TRAER EL PRODUCTOID MAS BREVE (MEJOR MOSTRARLO EN LA TABLA)
                        movimiento.ProductoID = Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[0].FormattedValue.ToString());
                        movimiento.UsuarioID = usuarioForm.UsuarioID;
                        movimiento.TipoMovimiento = 3; //1:Compra, 2:Venta, 3:Baja
                        movimiento.Cantidad = Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[5].FormattedValue) * -1;
                        movimiento.CostoUnitario = 0;
                        movimiento.PrecioVenta = 0;
                        movimiento.TallaID = Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[8].Value);
                        movimiento.ColorID = Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[10].Value);
                        movimiento.MaterialID = Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[12].Value);
                        movimiento.TemporadaID = Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[14].Value);

                        int MovimientoID = InventarioLn.InsertarMovimiento(movimiento);

                        //---------------------------------------------------------------------------------------
                    }
                    MessageBox.Show(this, "Se ha guardado con éxito la baja.");
                    this.Close();
                }
                else
                {
                    MessageBox.Show(this, error, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }       
        }

        private string ValidarValoresGrilla(DataGridView dgv)
        {
            string error = "";

            for (int i = 0; i < dgv.Rows.Count - 1; i++)
            {
                if (dgv.Rows[i].Cells[5].FormattedValue.ToString() == "" || Convert.ToDouble(dgv.Rows[i].Cells[5].FormattedValue) <= 0)
                    error += "- El valor debe ser mayor a cero (Columna: " + dgv.Columns[5].HeaderText.Replace("_", " ") + ", Fila: " + (i + 1).ToString() + ")\n";
            }

            return error;
        }

        private void dgwInventarioBajas_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 6 && e.RowIndex >= 0)
            {
                try
                {
                    int fila = e.RowIndex;
                    if (dgwInventarioBajas.Rows[e.RowIndex].Cells[0].Value != null)
                    {

                        FrmInventarioProductoDetalle frmInvVentasDet = FrmInventarioProductoDetalle.Instance();
                        frmInvVentasDet.ProductoId = Convert.ToInt32(dgwInventarioBajas.Rows[e.RowIndex].Cells[0].Value);
                        frmInvVentasDet.ShowDialog();
                        frmInvVentasDet.Activate();

                        if (InvVentasDetalle != null)
                        {
                            bool puede_agregar = true;

                            for (int i = 0; i < filas; i++)
                            {
                                if (Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[0].Value) == InvVentasDetalle.ProductoID &&
                                   Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[8].Value) == InvVentasDetalle.TallaID &&
                                   Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[10].Value) == InvVentasDetalle.ColorID &&
                                   Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[12].Value) == InvVentasDetalle.MaterialID &&
                                   Convert.ToInt32(dgwInventarioBajas.Rows[i].Cells[14].Value) == InvVentasDetalle.TemporadaID)
                                {
                                    puede_agregar = false;
                                    break;
                                }
                            }

                            if (puede_agregar)
                            {
                                dgwInventarioBajas.Rows[fila].Cells[7].Value = InvVentasDetalle.TallaDes;
                                dgwInventarioBajas.Rows[fila].Cells[8].Value = InvVentasDetalle.TallaID;
                                dgwInventarioBajas.Rows[fila].Cells[9].Value = InvVentasDetalle.ColorDes;
                                dgwInventarioBajas.Rows[fila].Cells[10].Value = InvVentasDetalle.ColorID;
                                dgwInventarioBajas.Rows[fila].Cells[11].Value = InvVentasDetalle.MaterialDes;
                                dgwInventarioBajas.Rows[fila].Cells[12].Value = InvVentasDetalle.MaterialID;
                                dgwInventarioBajas.Rows[fila].Cells[13].Value = InvVentasDetalle.TemporadaDes;
                                dgwInventarioBajas.Rows[fila].Cells[14].Value = InvVentasDetalle.TemporadaID;
                                dgwInventarioBajas.Rows[fila].Cells[15].Value = InvVentasDetalle.Stock;

                                InvVentasDetalle = null;
                            }
                            else
                            {
                                MessageBox.Show(this, "Ya existe un producto con las características seleccionadas en la grilla.\n\nPuede modificar la cantidad de productos insertados en el campo Cantidad.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        else
                        {
                            MessageBox.Show(this, "No seleccionó un detalle de producto o el seleccionado ya existe en la grilla para el producto: " + dgwInventarioBajas.Rows[fila].Cells[2].FormattedValue, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }                        
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }

        private void dgwInventarioBajas_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            filas = filas + 1;
        }

        private void itemID_KeyPressSoloNum(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void dgwInventarioBajas_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dgwInventarioBajas.CurrentCell.ColumnIndex == 5)      //Costo Unitario 
            {                
                e.Control.KeyPress += new KeyPressEventHandler(itemID_KeyPressSoloNum);
            }
        }

        
    }
}
